home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / assembler / progasm2.lha / SORGENTI4 / LEZIONE8h2.s / LEZIONE8h2.s
Text File  |  1995-08-05  |  6KB  |  227 lines

  1.  
  2. ; Lezione8h2.s        Routine di scrolltext 8*8, che usa solo il bplcon1
  3. ;            per scorrere. Originale di Lorenzo Di Gaetano.
  4.  
  5.     SECTION    SysInfo,CODE
  6.  
  7. *****************************************************************************
  8.     include    "startup1.s"    ; Salva Copperlist Etc.
  9. *****************************************************************************
  10.  
  11.         ;5432109876543210
  12. DMASET    EQU    %1000001110000000    ; solo copper e bitplane DMA
  13.  
  14. START:
  15.  
  16. ;    Puntiamo i bitplanes in copperlist
  17.  
  18.     MOVE.L    #schermo,d0    ; in d0 mettiamo l'indirizzo del bitplane
  19.     LEA    BPLPOINTERS,A1    ; puntatori nella COPPERLIST
  20.     move.w    d0,6(a1)    ; copia la word BASSA dell'indirizzo del plane
  21.     swap    d0        ; scambia le 2 word di d0 (es: 1234 > 3412)
  22.     move.w    d0,2(a1)    ; copia la word ALTA dell'indirizzo del plane
  23.  
  24.     MOVE.W    #DMASET,$96(a5)        ; DMACON - abilita bitplane, copper
  25.                     ; e sprites.
  26.  
  27.     move.l    #COPPERLIST,$80(a5)    ; Puntiamo la nostra COP
  28.     move.w    d0,$88(a5)        ; Facciamo partire la COP
  29.     move.w    #0,$1fc(a5)        ; Disattiva l'AGA
  30.     move.w    #$c00,$106(a5)        ; Disattiva l'AGA
  31.     move.w    #$11,$10c(a5)        ; Disattiva l'AGA
  32.  
  33.     clr.w    ContaScroll    ; Azzera il contatore dello scroll
  34.     bsr.w    Print        ; Stampa la prima volta
  35.  
  36. mouse:
  37.     MOVE.L    #$1ff00,d1    ; bit per la selezione tramite AND
  38.     MOVE.L    #$12c00,d2    ; linea da aspettare = $12c
  39. Waity1:
  40.     MOVE.L    4(A5),D0    ; VPOSR e VHPOSR - $dff004/$dff006
  41.     ANDI.L    D1,D0        ; Seleziona solo i bit della pos. verticale
  42.     CMPI.L    D2,D0        ; aspetta la linea $12c
  43.     BNE.S    Waity1
  44. Waity2:
  45.     MOVE.L    4(A5),D0    ; VPOSR e VHPOSR - $dff004/$dff006
  46.     ANDI.L    D1,D0        ; Seleziona solo i bit della pos. verticale
  47.     CMPI.L    D2,D0        ; aspetta la linea $12c
  48.     Beq.S    Waity2
  49.  
  50.     bsr.s    Scroll        ; Routine sche scrolla a sinistra il testo
  51.                 ; con bplcon1, e ogni 16 pixel lo ristampa
  52.                 ; 2 caratteri (8*2=16 pixel) piu' avanti
  53.                 ; resettando il bplcon1 -> SCROLLING!!!
  54.  
  55.     btst    #6,$bfe001    ; mouse premuto?
  56.     bne.s    mouse
  57.     rts
  58.  
  59. *****************************************************************************
  60. ; Routine che decide se scrollare col bplcon1, o ristampando l'intero testo
  61. ; 2 caratteri (16 pixel) piu' a sinistra (questo 1 volta ogni 16, naturalmente)
  62. *****************************************************************************
  63.  
  64. Scroll:
  65.     tst.b    Scrolling    ; Abbiamo scrollato al massimo con bplcon1?
  66.     bne.s    AlloraAdda    ; Se non ancora, continua la sottrazione
  67.  
  68. ; Altrimenti ripartiamo da $FF e ristampiamo il testo 2 caratteri avanti!
  69.  
  70.     addq.w    #2,ContaScroll    ; 2 caratteri piu' avanti -> 16 pixel avanti
  71.     move.b    #$FF,Scrolling    ; Resetta bplcon1
  72.     bsr.s    Print        ; e ristampa il ScrollText 2 caratteri piu'
  73.     rts            ; avanti,  ossia 2*8=16 pixel piu' avanti.
  74.  
  75. AlloraAdda:
  76.     sub.b    #$11,Scrolling    ; 1 pixel verso sinistra con bplcon1
  77.     rts
  78.  
  79. *****************************************************************************
  80. ; Routine di print 8*8 modificata per lo scroll
  81. *****************************************************************************
  82.  
  83. Print:
  84.     lea    Schermo+(42*192),a0    ; Indirizzo dove stampare
  85.     lea    ScrollText(PC),a1    ; Indirizzo scrolltext (ascii)
  86.     moveq    #42-1,d2        ; Numero caratteri da stampare
  87.     moveq    #0,d0
  88.     move.w    ContaScroll(PC),d0    ; Offset dall'inizio del ScrollText
  89.     add.l    d0,a1            ; Trova il carattere nello scrolltext
  90. Printriga:
  91.     sub.l    a2,a2        ; azzera a2
  92.     moveq    #0,d1
  93.     move.b    (a1)+,d1
  94.     cmp.b    #$ff,d1        ; flag di fine ScrollText?
  95.     bne.s    NonRipartire    ; Se non ancora, continua
  96.     clr.w    Contascroll    ; Oppure, riparti dall'inizio del ScrollText
  97. NonRipartire:
  98.     sub.b    #$20,d1
  99.     lsl.w    #3,d1        ; moltiplica per 8
  100.     move.l    d1,a2
  101.     add.l    #Fonts,a2    ; trova il carattere nel font
  102.     move.b    (a2)+,(a0)
  103.     move.b    (a2)+,42(a0)    ; 42 per compensare il dfstart e andare quindi
  104.     move.b    (a2)+,42*2(a0)    ; oltre lo schermo
  105.     move.b    (a2)+,42*3(a0)
  106.     move.b    (a2)+,42*4(a0)
  107.     move.b    (a2)+,42*5(a0)
  108.     move.b    (a2)+,42*6(a0)
  109.     move.b    (a2)+,42*7(a0)
  110.     addq.w    #1,a0        ; prossimo carattere
  111.     dbra    d2,Printriga
  112.     rts
  113.  
  114. ContaScroll:
  115.     dc.w    0
  116.  
  117.  
  118.  
  119. ScrollText:
  120.     dc.b    "                                              "
  121.     dc.b    "QUESTO TESTO VIENE SPOSTATO CON IL REGISTRO BPLCON1:"
  122.     DC.B    " DOPO AVERLO SPOSTATO DI 16 PIXEL VIENE AZZERATO,"
  123.     DC.B    " E INVECE DI PUNTARE ALLA PROSSIMA WORD DELL` IMMAGINE IL TE"
  124.     DC.B    "STO VIENE RISTAMPATO SULLO SCHERMO 2 LETTERE DOPO."
  125.     DC.B    "L'AUTORE, LORENZO DI GAETANO, (The Amiga Dj) HA FATTO QUESTA"
  126.     dc.b    " ROUTINE CON LE SOLE CONOSCENZE DEL DISCO 1 DEL CORSO."
  127.     dc.b    "... FORZA AMIGA!!!                    "
  128.     DC.B    "                                       "
  129.     dc.b    $FF    ; Flag di fine scrolltext
  130.  
  131.     even
  132.  
  133. ; Font 8x8
  134.  
  135. Fonts:
  136.     incbin    "nice.fnt"
  137.  
  138. ;****************************************************************************
  139.  
  140.     SECTION    GRAPHIC,DATA_C
  141.  
  142.  
  143. COPPERLIST:
  144.     dc.w    $08e,$2c81       ; Qui` ci sono i registri standard
  145.     dc.w    $090,$2cc1
  146.     dc.w    $092,$0038
  147.     dc.w    $094,$00d0
  148.     dc.w    $102,0
  149.     dc.w    $104,0
  150.     dc.w    $108,2            ;2 per saltare il vuoto dell` immagine
  151.     dc.w    $10a,2
  152.  
  153. bplpointers:
  154.     dc.w    $e0,$0000,$e2,$0000    ; Puntatori ai bitplane
  155.  
  156.     dc.w    $100,%0001001000000000 ; Bplcon0 2 colori
  157.  
  158.     dc.w    $180,$000
  159.     dc.w    $182,$888
  160.  
  161. ; Qua potrebbe starci un'immagine qualsiasi...
  162.  
  163.     dc.w    $eb07,$fffe    ; Qui` comincia la copperlist dello 
  164.                 ; scrolling.
  165.     dc.w    $092,$0030    ; Per nascondere l`errore di scroll
  166.     dc.w    $094,$00d0
  167.  
  168.     dc.w    $104,0
  169.     dc.w    $108,0
  170.     dc.w    $10a,0
  171.     dc.w    $102        ; bplcon1
  172.     dc.b    $00
  173. Scrolling:
  174.     dc.b    $FF
  175.     dc.w    $182,$200
  176.     dc.w    $ec07,$FFFe
  177.     dc.w    $182,$400
  178.     dc.w    $ed07,$fffe
  179.     dc.w    $182,$600
  180.     dc.w    $ee07,$fffe
  181.     dc.w    $182,$800
  182.     dc.w    $ef07,$fffe
  183.     dc.w    $182,$a00
  184.     dc.w    $f007,$fffe
  185.     dc.w    $182,$d00
  186.     dc.w    $f107,$fffe
  187.     dc.w    $182,$a00
  188.     dc.w    $f207,$fffe
  189.     dc.w    $182,$800
  190.     dc.w    $f307,$fffe    
  191.     
  192.     dc.w    $182,$000    ; Effetti copper...
  193.     dc.w    $180,$001
  194.     dc.w    $108,-84
  195.     dc.w    $10a,-84
  196.     dc.w    $f4ff,$fffe
  197.     dc.w    $180,$003
  198.     dc.w    $f5ff,$fffe
  199.     dc.w    $180,$005
  200.     dc.w    $f6ff,$fffe
  201.     dc.w    $180,$007
  202.     dc.w    $f7ff,$fffe
  203.     dc.w    $180,$009
  204.     dc.w    $f8ff,$fffe
  205.     dc.w    $180,$00b
  206.     dc.w    $f8ff,$fffe
  207.     dc.w    $180,$00c
  208.     dc.w    $f9ff,$fffe
  209.     dc.w    $180,$00f
  210.     dc.w    $faff,$fffe
  211.     dc.w    $180,$00f
  212.     dc.w    $fbff,$fffe
  213.     dc.w    $180,$000
  214.     dc.w    $108,0
  215.     dc.w    $10a,0
  216.     dc.w    $ffff,$fffe    ; Fine copperlist
  217.  
  218. ;****************************************************************************
  219.  
  220.     Section    Bitplanozzo,bss_C
  221.  
  222. Schermo:
  223.     ds.b    42*256
  224.  
  225.     end
  226.  
  227.